//package com.yxtec.mina.client;
//
//import java.io.FileNotFoundException;
//import java.io.IOException;
//import java.io.RandomAccessFile;
//
//import org.apache.mina.core.service.IoHandlerAdapter;
//import org.apache.mina.core.session.IdleStatus;
//import org.apache.mina.core.session.IoSession;
//
//import com.yxtec.model.RequestFile;
//import com.yxtec.model.ResponseFile;
//import com.yxtec.model.SecureModel;
//import com.yxtec.util.Base64Coder;
//import com.yxtec.util.ObjectConvertUtil;
//
///**
// * @author liaogd
// * @createDate	 2013-12-18
// *
// */
//public class MinaClientHandler extends IoHandlerAdapter {
//	private int byteRead;
//	private volatile long start = 0;
//	public RandomAccessFile randomAccessFile;
//	private RequestFile request;
//	//读取大小
//	private final int minReadBufferSize = 1024 * 20;
//
//	public MinaClientHandler(RequestFile ef) {
//		if (ef.getFile().exists()) {
//			if (!ef.getFile().isFile()) {
//				System.out.println("Not a file :" + ef.getFile());
//				return;
//			}
//		}
//		this.request = ef;
//	}
//
//	@Override
//	public void messageReceived(IoSession session, Object msg) throws Exception {
//		msg = ObjectConvertUtil.convertModle((String) msg);
//
//		/*
//		 * 当服务器返回了一个secureModel并且为true时表示已经连接并且验证成功 这个时候，需要向服务器写数据
//		 */
//		if (msg instanceof SecureModel) {
//			try {
//				randomAccessFile = new RandomAccessFile(request.getFile(), "r");
//				randomAccessFile.seek(request.getStarPos());
//				byte[] bytes = new byte[minReadBufferSize];
//				if ((byteRead = randomAccessFile.read(bytes)) != -1) {
//					request.setEndPos(byteRead);
////					request.setBytes(bytes);
//					request.setBytes(Base64Coder.encode(bytes));
//					request.setFile_size(randomAccessFile.length());
//
//					session.write(ObjectConvertUtil.request(request));
//				} else {
//					System.out.println("文件已经读完");
//				}
//			} catch (FileNotFoundException e) {
//				e.printStackTrace();
//			} catch (IOException i) {
//				i.printStackTrace();
//			}
//			return;
//		}
//		
//		// 如果消息是一个响应文件，那么表示可以继续读写
//		if (msg instanceof ResponseFile) {
//			ResponseFile response = (ResponseFile) msg;
//			// TODO 每次拿到的response 的progress 作为显示进度使用
//
//			
//			// 如果已经读写完成，那么就关闭连接
//			if (response.getEnd().equals("1")) {
//				// TODO 上传完成，客户端再次用于判别
//				
//				 response.getCode();
//				
//				randomAccessFile.close();
//				session.close(true);
//				System.out.println("结束，客户端关闭了流"+response.getCode());
//			} else {
//				start = response.getStart();
//				if (start != -1) {
//					// 已只读的方式读取此文件
//					randomAccessFile = new RandomAccessFile(request.getFile(),
//							"r");
//					randomAccessFile.seek(start);
//
//					// a=文件总长度-开始位置 = 剩余量
//					int a = (int) (randomAccessFile.length() - start);
//					// 赋值为最小读取长度
//					int sendLength = minReadBufferSize;
//					// 当剩余量小于最小长度
//					if (a < minReadBufferSize) {
//						sendLength = a;
//					}
//					byte[] bytes = new byte[sendLength];
//
//					if ((byteRead = randomAccessFile.read(bytes)) != -1
//							&& (randomAccessFile.length() - start) > 0) {
//						request.setEndPos(byteRead);
////						request.setBytes(bytes);
//						request.setBytes(Base64Coder.encode(bytes));
//						try {
//							session.write(ObjectConvertUtil.request(request));
//
//						} catch (Exception e) {
//							e.printStackTrace();
//						}
//					} else {
//						randomAccessFile.close();
//						session.close(true);
//						System.out.println("文件存在，客户端关闭了流");
//					}
//				}
//			}
//		}
//	}
//	
//
//	@Override
//	public void sessionIdle(IoSession session, IdleStatus status)
//			throws Exception {
//		//当读写空闲的时候，要关闭所有的session
//		session.close(true);
//	}
//
//	@Override
//	public void exceptionCaught(IoSession session, Throwable cause)
//			throws Exception {
//		//TODO 发送异常，关闭连接
//		session.close(true);
//	}
//
//	@Override
//	public void sessionOpened(IoSession session) throws Exception {
//		SecureModel secure = new SecureModel();
//		secure.setToken("2222222222222");
//		session.write(ObjectConvertUtil.request(secure));
//	}
//}
